// ----------------------------------------------------------------------------
// vector4.h
// ----------------------------------------------------------------------------
/*
 Description:
 4要素ベクトルクラス. vectormathを利用している.  
 
 ----------------------------------------------------------------
 使い方.

 */
#pragma once
#include <fw/base/core/macros.h>
#ifdef  FW_BASE_VECTORMATH_USE_SCALAR
#include <external/vectormath/scalar/cpp/vectormath_aos.h>
#else
#include <external/vectormath/SSE/cpp/vectormath_aos.h>
#endif

namespace fw
{
	typedef Vectormath::Aos::Vector4 vec4;
	typedef Vectormath::Aos::Vector4 float4;
	
	// 環境によって引数の型を変更する.
	// FW_FASTCALL宣言を関数に利用した場合、３つの引数まではavec4(afloat4)を利用することで
	// 引数の引渡しが最適化される可能性がある.
#if   (FW_TARGET_WINDOWS == 1) && (FW_TARGET_32BIT == 1)
	typedef const vec4    avec4;
	typedef const float4  afloat4;
	typedef const vec4&   bvec4;
	typedef const float4& bfloat4;
	
#elif (FW_TARGET_WINDOWS == 1) && (FW_TARGET_64BIT == 1)
	typedef const vec4&   avec4;
	typedef const float4& afloat4;
	typedef const vec4&   bvec4;
	typedef const float4& bfloat4;
	
#else
	typedef const vec4&   avec4;
	typedef const float4& afloat4;
	typedef const vec4&   bvec4;
	typedef const float4& bfloat4;
	
#endif
	
} // namespace fw

using fw::vec4;
using fw::float4;
using fw::avec4;
using fw::afloat4;
using fw::bvec4;
using fw::bfloat4;
